package com.feihong.yw189.utils;

import android.content.Context;
import android.os.Environment;

import java.io.File;
import java.math.BigDecimal;

/**
 * Created by PVer on 2017/6/28.
 * 缓存清除类
 */

public class CacheDataManger {

    public static String getTotalCacheSize(Context context) throws Exception{

        long cacheSize = getFolderSize(context.getCacheDir());

        //检测存储卡权限
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            cacheSize += getFolderSize(context.getExternalCacheDir());
        }

        return getFormatSize(cacheSize);
    }

    public static void clearAllCache(Context context){

        deleteDir(context.getCacheDir());

        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            deleteDir(context.getExternalCacheDir());
        }
    }

    public static boolean deleteDir(File dir){

        if (dir != null && dir.isDirectory()){

            String[] children = dir.list();

            for (int i = 0; i<children.length; i++){
                boolean success = deleteDir(new File(dir,children[i]));
                if (! success){
                    return false;
                }
            }
        }

        return dir.delete();
    }

    public static long getFolderSize(File file){

        long size = 0;

        try {
            File[] fileList = file.listFiles();

            for (int i =0; i<fileList.length; i++){
                //如果还有子文件
                if (fileList[i].isDirectory()){
                    size = size + getFolderSize(fileList[i]);
                }else{
                    size = size + fileList[i].length();
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }

        return size;
    }

    public static String getFormatSize(double size){

        double kiloByte = size / 1024;

        if(kiloByte < 1){
            return  size + "B";
        }

        double resByte = kiloByte / 1024;

        if (resByte < 1){
            //用精确数字自带的函数取两位小数
            BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
            return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB";
        }

        double resByte2 = resByte / 1024;

        if (resByte2 < 1){
            BigDecimal result2 = new BigDecimal(Double.toString(resByte));
            return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB";
        }

        BigDecimal result3 = new BigDecimal(Double.toString(resByte2));
        return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB";
    }
}
